// Loesung_von_Aufgabe_10.3_2_Ziegelstein

float v = 1.5; // Relativgeschwindigkeit des Ziegelsteins
float c = 3; // Lichtgeschwindigkeit in unserer Pixelwelt
float Z; // Verzerrungsfaktor
float x = 0; // Ort des Ziegelsteins
float mr; // Masse im Ruhesystem
float mb = 255; // Masse im bewegten System
float lr; // Ziegelsteinlänge im Ruhesystem
float lb = 100; // Ziegelsteinlänge im bewegten System

float dt = 1; // dt ist die Zeit zwischen zwei Bildern der Simulation

void setup()
{
  size(800, 200);

  // Verzerrungsfaktor Z wird berechnet
  Z = 1/(sqrt(1-((v*v)/(c*c))));

  mr = Z*mb; // Massenzunahme
  lr = lb*(1/Z); // Längenkontraktion
}

void draw()
{
  background(100, 200, 255);

  // Darstellung der Längenkontraktion und der Massenzunahme
  x = x + v*dt; // Bewegung des Ziegelsteins in x-Richtung
  noStroke();
  fill(255/Z); // Mit zunehmender Geschwindigkeit ändert sich die Farbe von weiß nach schwarz
  rect(x, 50, lr, 50); // Ziegelstein

  /* Wenn der Ziegelstein rechts das Fensters verlässt,
   dann erscheint er wieder links im Fenster */
  if (x > width)
  {
    x = -lr;
  }

  // Beobachter im Ruhesystem
  stroke(255, 0, 0);
  strokeWeight(3);
  fill(255, 0, 0);
  ellipse(400, 160, 15, 15);
  line(400, 168, 400, 180);
  line(400, 180, 390, 200);
  line(400, 180, 410, 200);
  line(400, 175, 380, 165);
  line(400, 175, 420, 165);

  // Geschwindigkeitsangaben
  fill(255); 
  textSize(30);
  text("c = 3   v = " +v, 50, 180);

  // Wenn v >= c wird die Simulation nicht ausgeführt
  if (v >= c)
  {
    fill(255, 0, 0);
    textSize(30);
    text("v größer oder gleich c", width/2, 100);
    noLoop();
  }
}